/* 
类型声明  declare
1. 关于声明的使用
    -- declare, 仅仅让代码有提示功能, 并没有实现具体逻辑实现, 不能初始化
    -- declare module xx等同于 declare namespace xx 
    --  declare 内部的内容不需要 export 导出，也不需要 再增加 declare
    -- 一般在 xx.d.ts 文件中进行声明
    --  同名的声明变量会命名冲突，同名的函数与命名空间可以自动合并属性，命名空间和命名空间可以自动合并属性
2.以 jquery 为例配置 types 文件 xxx.d.ts
    -- 需要安装 @types/jqury , 然后就可以直接使用 $ 有提示了;
    -- 当不使用 @types/jqury 时，需要将 "moduleResolution" 选项设置为 "node"，或者将别名添加到 "paths" 选项中,即在 ts.config 中配置 path 属性,
    --  "path":{ "*": ["types/*" ] }  表示声明文件如果没有就到根目录的 types 目录下的 xxx.ts 文件中找，一般命名为 xxx.d.ts ; 文件内部需要导出目 标值; export default $ 或者 export = $
3. export = jquery 
   -- 表示代码可 可以在 commonjs 中被使用, 也支持 ES6 规范，可以使用 import $ = require('jquery') 方式来接收; 与 import $ from 'jquery' 效果一样
   -- const $ = require('jquery') 表示没有使用声明文件



*/
//---------------一般实例-------------
declare let vue: object
declare function sum(): void
declare class Person { }
declare interface Ixx {
    name: string
}
declare namespace A {
    const a: string
}
//-----------------------------------

//---------------jQuery 为例------------------
// 使用函数方式，可以方便外界合并扩展属性
declare function $(selector: string): { // : 后面的对象是函数返回值
    width(val: number): void;
    height(val: number): void;
}

$('xxx').height(120)
$('xxx').width(130)

// ------------用命名空间和同名函数合并扩展属性---------------
declare namespace $ {
    namespace fn {
        function extend(): void
    }
}
$.fn.extend() // 使用
//--------------------------------------------

// 如果模块使用的是 ts 编写的,就不需要安装类型声明文件

export { }